package com.wenjie.common.utils;

import cn.hutool.core.text.StrFormatter;

import java.util.Arrays;
import java.util.Collection;

public class StringUtils {

    public static Boolean isNotEmpty(String str) {
        return str != null && !str.isEmpty();
    }

    public static Boolean isEmpty(String str) {
        return !isNotEmpty(str);
    }

    public static boolean isNotBlank(String str) {
        return str != null && !str.trim().isEmpty();
    }

    public static boolean isBlank(String str) {
        return !isNotBlank(str);
    }


    public static String sub(String oldStr, int start, int end, String replaceStr) {
        String startStr = oldStr.substring(0, start);
        String endStr = oldStr.substring(end);
        return startStr + replaceStr + endStr;
    }


    /**
     * @Description 一个字符串中包含另外一个字符串的数量
     * @author wenjie
     * @date 2024/8/6 10:44
     */
    public static int countOccurrences(String text, String target) {
        int count = 0;
        int idx = 0;

        while ((idx = text.indexOf(target, idx)) != -1) {
            count++;
            idx += target.length();
        }

        return count;
    }


    /**
     * 格式化文本, {} 表示占位符<br>
     * 此方法只是简单将占位符 {} 按照顺序替换为参数<br>
     * 如果想输出 {} 使用 \\转义 { 即可，如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>
     * 例：<br>
     * 通常使用：format("this is {} for {}", "a", "b") -> this is a for b<br>
     * 转义{}： format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
     * 转义\： format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
     *
     * @param template 文本模板，被替换的部分用 {} 表示
     * @param params   参数值
     * @return 格式化后的文本
     */
    public static String format(String template, Object... params) {
        if (isEmpty(Arrays.asList(params)) || isEmpty(template)) {
            return template;
        }
        return StrFormatter.format(template, params);
    }



    /**
     * * 判断一个Collection是否为空， 包含List，Set，Queue
     *
     * @param coll 要判断的Collection
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(Collection<?> coll)
    {
        return isNull(coll) || coll.isEmpty();
    }

    /**
     * * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空 false：非空
     */
    public static boolean isNull(Object object)
    {
        return object == null;
    }

}
